1. Field of the Invention
The present invention relates generally to computer systems and more specifically to the transfer of data during an input/output transaction to memory controlled by an application program.
2. Description of Related Art
Current input/output (I/O) technology for computer systems provides for a single I/O device driver program controlling an I/O device, with that I/O device driver executing as a component of operating system (OS) software solely within the OS environment on a host system. The OS directly controls I/O operations between the I/O device and its physical memory. If another host system wants access to the I/O device, it must request service from the OS on the host system owning the I/O device. Thus, the OS regulates all access to the I/O device as a single source for I/O requests to the I/O device. In simple single I/O unit or single host system operating environments this is sufficient, but in clustered environments (or even in single processor environments where the application program requesting the I/O transaction resides in an I/O channel), the I/O device driver in the OS must move the data at least twice. For an I/O write operation, the OS first copies the data from the original location in memory assigned to the requesting application program on one host system to a memory space in a second host system that controls the I/O device. This second host system then issues the I/O command to the I/O device to send the data. For an I/O read operation, the OS of the second host system causes the I/O device to move the data into a buffer controlled by the OS, and then forwards the data to the memory in the second host system. The second host system then forwards the data from its memory to the memory assigned to the requesting application program in the first host system.
FIG. 1 is a prior art diagram illustrating the double movement of I/O data when a remote process on a first host system is requesting service from an I/O device controlled by a second host system. Host System 1 10 desires to read from or write data to I/O Device 12. The I/O Device 12 is controlled by I/O Unit 14, which is coupled to Host System 2 16. In a first example where an I/O read is requested, Host System 1 10 sends a request to Host System 2 16 for I/O service from the selected I/O Device 12. The request includes the address in Host System 1 memory where the I/O data read by the I/O Device is to be written. Host System 2 then sends a request for I/O to I/O Unit 14. When the requested data is read from the I/O Device 12, the data is transferred to memory within Host System 2 16. Upon receipt, Host System 2 forwards the data to the specified location in Host System 1. In a second example where an I/O write is requested, Host System 1 sends a request including the data to be written to Host System 2. This data is thus forwarded from memory in Host System 1 to memory in Host System 2. Host System 2 forwards the data to local memory in I/O Unit 14 for transfer to I/O Device 12.
With the advent of new intelligent I/O standards, peer-to-peer I/O processing, and clustering of host systems, there is a need to securely direct I/O transactions between an I/O device and memory outside of the physical memory domain available to the I/O device, thereby avoiding the double movement of I/O data illustrated above and improving the overall efficiency of the computer system. Furthermore, directing data movement during I/O operations between an I/O unit and a first host system without requiring a second host system to forward the data would be especially advantageous in a clustered system environment.